0.2 Datasets to Test

0.4 Main Loop

for (dset in names(NNdatasets)) {

    ## =============================================
    ## EXTRACT INFORMATION FROM THE SELECTED DATASET
    ## =============================================
    ds     <- NNdatasets[[dset]]$ds
    Z      <- NNdatasets[[dset]]$Z
    neur   <- NNdatasets[[dset]]$neur
    nparNN <- NNdatasets[[dset]]$nparNN
    fmlaNN <- NNdatasets[[dset]]$fmlaNN
    donotremove  <- c("dset", "dsets", "ds", "Z", "neur", "TF", "nrep", "timer",
                      "donotremove", "donotremove2")
    donotremove2 <- c("dset", "dsets") 

    ## ===================================================
    ## SELECT THE FORMAT REQUIRED BY THE PACKAGE/ALGORITHM
    ## d = data.frame, m = matrix, v = vector/numeric
    ## ATTACH THE OBJECTS CREATED (x, y, Zxy, ... )
    ## ===================================================
    ZZ     <- prepareZZ(Z, xdmv = "d", ydmv = "v", zdm = "d", scale = TRUE)
    attach(ZZ)

    ## =============================================
    ## SELECT THE PACKAGE USED FOR TRAINING
    ## nrep => SELECT THE NUMBER OF INDEPENDANT RUNS
    ## iter => SELECT THE MAX NUMBER OF ITERATIONS
    ## TF   => PLOT THE RESULTS
    ## =============================================

    
    nrep   <- 5
    TF     <- TRUE 

    method <- c("ADAPTgd", "ADAPTgdwm", "BATCHgd", "BATCHgdwm")
        
    for (m in method) {
        
        descr  <- paste(dset, "AMORE::train", m, sep = "_")

        ## AUTO
        Ypred  <- list()
        Rmse   <- numeric(length = nrep)
        Mae    <- numeric(length = nrep)
    
        for(i in 1:nrep){
            event      <- paste0(descr, sprintf("_%.2d", i))
            timer$start(event)
            #### ADJUST THE FOLLOWING LINES TO THE PACKAGE::ALGORITHM
            
            hyper_params <- hyperParams(optim_method = m)

            NNreg      <- tryCatch(
                            NNtrain(x = x, y = y, hidden_neur = neur, optim_method = m),
                            error = function(y) {lm(y ~ 0, data = Zxy)}
                          )     
            y_pred     <- tryCatch(
                            ym0 + ysd0 * AMORE::sim.MLPnet(NNreg$net, x),
                            error = ym0
                          )     
            ####
            Ypred[[i]] <- y_pred
            Rmse[i]    <- funRMSE(y_pred, y0)
            Mae[i]     <- funMAE(y_pred, y0)
            timer$stop(event, RMSE = Rmse[i], MAE = Mae[i], params = hyper_params$params, printmsg = FALSE)
        }
        best <- which(Rmse == min(Rmse, na.rm = TRUE))[1]
        best ; Rmse[[best]]
        
        ## ================================================
        ## PLOT ALL MODELS AND THE MODEL WITH THE BEST RMSE
        ## par OPTIONS CAN BE IMPROVED FOR A BETTER DISPLAY
        ## ================================================
        op <- par(mfcol = c(1,2))
        plotNN(xory, y0, uni, TF, main = descr)
        for (i in 1:nrep) lipoNN(xory, Ypred[[i]], uni, TF, col = i, lwd = 1)
        
        plotNN(xory, y0, uni, TF, main = descr)
        lipoNN(xory, Ypred[[best]], uni, TF, col = 4, lwd = 4)
        par(op)
    }


## ===========================
## DETACH ZZ - END OF THE LOOP
## ===========================
    detach(ZZ)
}

0.5 Results

0.6 Best Results

dataset method minRMSE meanRMSE meanTime
mDette ADAPTgd 4.5896 5.47472 0.010
ADAPTgdwm 4.8195 5.51316 0.004
BATCHgd 2.8236 3.12192 0.008
BATCHgdwm 2.8236 3.05266 0.006
mFriedman ADAPTgd 0.1262 0.13960 0.006
ADAPTgdwm 0.1382 0.14290 0.004
BATCHgd 0.0736 0.08904 0.004
BATCHgdwm 0.0718 0.10116 0.008
mIshigami ADAPTgd 3.2582 3.30788 0.006
ADAPTgdwm 3.3577 3.37464 0.002
BATCHgd 3.1914 3.26394 0.006
BATCHgdwm 3.1587 3.29010 0.010
mRef153 ADAPTgd 6.2911 7.02502 0.004
ADAPTgdwm 7.0479 7.24446 0.000
BATCHgd 4.3390 4.79020 0.002
BATCHgdwm 4.0446 4.71348 0.004
uDmod1 ADAPTgd 0.5808 0.58202 0.002
ADAPTgdwm 0.5852 0.58728 0.004
BATCHgd 0.6039 0.62092 0.004
BATCHgdwm 0.5929 0.61310 0.002
uDmod2 ADAPTgd 0.4692 0.47156 0.002
ADAPTgdwm 0.4845 0.49426 0.002
BATCHgd 0.4272 0.48082 0.004
BATCHgdwm 0.4546 0.46386 0.000
uDreyfus1 ADAPTgd 0.5723 0.65630 0.002
ADAPTgdwm 0.7239 0.96888 0.006
BATCHgd 0.4560 0.59284 0.004
BATCHgdwm 0.4850 0.52154 0.006
uDreyfus2 ADAPTgd 0.6225 0.69312 0.000
ADAPTgdwm 0.7350 0.85642 0.004
BATCHgd 0.4679 0.52326 0.000
BATCHgdwm 0.4914 0.56196 0.002
uGauss1 ADAPTgd 28.6886 28.85504 0.006
ADAPTgdwm 28.6670 28.77448 0.002
BATCHgd 28.7956 29.26444 0.006
BATCHgdwm 28.7379 29.16138 0.004
uGauss2 ADAPTgd 28.7580 30.68160 0.000
ADAPTgdwm 28.3760 30.60606 0.002
BATCHgd 19.7236 21.39458 0.004
BATCHgdwm 20.8187 25.46652 0.006
uGauss3 ADAPTgd 35.0243 37.20622 0.002
ADAPTgdwm 33.7479 34.72444 0.000
BATCHgd 22.3513 29.34986 0.004
BATCHgdwm 23.7789 24.77392 0.002
uNeuroOne ADAPTgd 0.9740 0.99786 0.004
ADAPTgdwm 0.9788 1.07532 0.000
BATCHgd 0.8223 0.91320 0.004
BATCHgdwm 0.7889 0.87098 0.002